#ifndef EDITORPROGRAM_H
#define EDITORPROGRAM_H

#include <gfx/iprogram.h>
#include <material/editorshader.h>
#include <vector>

class EditorProgram : public iProgram
{
  CE_OBJECT
private:
  iProgram* _program;

  std::vector<EditorShader*>  _shaders;

public:
  EditorProgram();
  ~EditorProgram ();

  virtual void ClearShaders ();
  virtual void AttachShader (iShader* shader);
  virtual void DetachShader (iShader* shader);
  virtual bool Link ();

  virtual std::string GetLinkInfoLog () const;

  unsigned GetNumberOfShaders () const;
  EditorShader* GetShader (unsigned idx);


  virtual void Bind ();

  virtual void RegisterSemantic (const ceProgramParameterName& name, const std::string& parameterName);
  virtual void RegisterSemantic (ceProgramParameterBinding binding, const std::string& parameterName);

  virtual iProgramParameter* GetParameter(const ceProgramParameterName& name);
  virtual iProgramParameter* GetParameter(ceProgramParameterBinding binding);

};

#endif // EDITORPROGRAM_H
